#include "StdAfx.h"
#include "Plik.h"

IMPLEMENT_SERIAL(CPlik, CObject, SERIALIZE_VERSION)
CPlik::CPlik(void)
	: strNazwa(_T(""))
	, strSciezka(_T(""))
	, nRozmiar(0)
	, bChecked(FALSE)
	, iState(0)
{
}


CPlik::~CPlik(void)
{
}


// Pobiera rozmiar
int CPlik::GetSize(void)
{
	return nRozmiar;
}


// Ustawia rozmiar
void CPlik::SetSize(const int _nRozmiar)
{
	nRozmiar = _nRozmiar;
}


// Pobiera nazwe
CString CPlik::GetName(void)
{
	return strNazwa;
}


// Ustawia nazwe
void CPlik::SetName(const CString _strNazwa)
{
	strNazwa = _strNazwa;
}


// Pobiera sciezke
CString CPlik::GetPath(void)
{
	return strSciezka;
}


// Ustawia sciezke
void CPlik::SetPath(const CString _strSciezka)
{
	strSciezka = _strSciezka;
}


// Serializacja
void CPlik::Serialize(CArchive &ar)
{
	CObject::Serialize(ar);
	if(ar.IsStoring())
	{
		ar << strNazwa << strSciezka << nRozmiar << iState << bChecked;
	}
	else
	{
		ar >> strNazwa >> strSciezka >> nRozmiar >> iState >> bChecked;
	}
}


// Pobierz stan zaznaczenia
BOOL CPlik::GetCheck(void)
{
	return bChecked;
}


// Ustawia/usuwa zaznaczenie
void CPlik::SetCheck(BOOL _bChecked)
{
	bChecked = _bChecked;
}


// Pobierz stan
int CPlik::GetState(void)
{
	return iState;
}


// Ustawia stan
void CPlik::SetState(int _iState)
{
	iState = _iState;
}


// Konstruktor kopiujacy
CPlik::CPlik(const CPlik& plik)
{
	strNazwa   = plik.strNazwa;
	strSciezka = plik.strSciezka;
	nRozmiar   = plik.nRozmiar;
	iState     = plik.iState;
	bChecked   = plik.bChecked;
}


//Dane do tablicy BYTE
BYTE* CPlik::ToByteArray(int iHeadersID)
{
	int nNazwaSize = strNazwa.GetLength();
	int nSize = sizeof(nSize) + sizeof(nRozmiar) + sizeof(nNazwaSize) + sizeof(TCHAR) * nNazwaSize;
	BYTE *data = new BYTE[1 + nSize];
	BYTE *iter = data + 1;
	TCHAR *tcharNazwa = new TCHAR[nNazwaSize + 1];
	wcscpy_s(tcharNazwa, nNazwaSize + 1, strNazwa);

	memset((void*)data,NULL,nSize);

	data[0] = iHeadersID;

	memcpy((void*)iter, (void*)&nSize, sizeof(nSize));
	iter += sizeof(nSize);
	memcpy((void*)iter, (void*)&nRozmiar, sizeof(nRozmiar));
	iter += sizeof(nRozmiar);
	memcpy((void*)iter, (void*)&nNazwaSize, sizeof(nNazwaSize));
	iter += sizeof(nNazwaSize);
	memcpy((void*)iter, (void*)tcharNazwa, sizeof(TCHAR) * nNazwaSize);

	delete [] tcharNazwa;
	
	return data;
}

void CPlik::FromByteArray(BYTE *pData)
{
	BYTE *iter = pData;
	int nRozmiar;
	int nNazwaSize;
	CString strNazwa;
	CString strRemote;
	TCHAR *tcharNazwa;

	memcpy((void*)&nRozmiar, (void*)pData, sizeof(nRozmiar));
	iter += sizeof(nRozmiar);
	memcpy((void*)&nNazwaSize, (void*)iter, sizeof(nNazwaSize));
	iter += sizeof(nNazwaSize);
	tcharNazwa = new TCHAR[nNazwaSize + 1];
	memcpy((void*)tcharNazwa, (void*)iter, sizeof(TCHAR) * nNazwaSize);
	tcharNazwa[nNazwaSize] = NULL;

	strRemote.LoadString(IDS_REMOTE);
	SetSize(nRozmiar);
	SetName(tcharNazwa);
	SetPath(strRemote);
	SetCheck(TRUE);
	delete tcharNazwa;
}